#include "mywidget.h"
#include <QColorDialog>     //颜色对话框
#include <QDebug>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFileDialog>
#include <QStringList>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QProgressDialog>
#include <QCoreApplication>
#include <QErrorMessage>
#include <QLabel>               //标签



MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    //颜色对话框：
    colordlg = new QPushButton("颜色对话框",this);
    connect(colordlg,SIGNAL(clicked(bool)),this,SLOT(onColorBtnSlot()));

    //文本编辑器：
    textEdit = new QTextEdit(this);

    //文件对话框：
    filedlg = new QPushButton("文件对话框",this);
    connect(filedlg,SIGNAL(clicked(bool)),this,SLOT(onFileBtnSlot()));

    //字体对话框：
    fontBtn = new QPushButton("字体对话框",this);
    connect(fontBtn,SIGNAL(clicked(bool)),this,SLOT(onFontBtnSlot()));

    //输入对话框：
    inputBtn = new QPushButton("输入对话框",this);
    connect(inputBtn,SIGNAL(clicked(bool)),this,SLOT(onInputBtnSlot()));

    //消息对话框：
    messageBtn = new QPushButton("消息对话框",this);
    connect(messageBtn,SIGNAL(clicked(bool)),this,SLOT(onMessageBtnSlot()));

    //进度对话框：
    progressBtn = new QPushButton("进度对话框",this);
    connect(progressBtn,SIGNAL(clicked(bool)),this,SLOT(onProgressBtnSlot()));

    //错误对话框：
    errorBtn = new QPushButton("错误对话框",this);
    connect(errorBtn,SIGNAL(clicked(bool)),this,SLOT(onErrorBtnSlot()));

    //向导对话框：
    wizardBtn = new QPushButton("向导对话框",this);
    connect(wizardBtn,SIGNAL(clicked(bool)),this,SLOT(onWizarBtnSlot()));
    //布局：
    QHBoxLayout* mainLayout = new QHBoxLayout;
    mainLayout->addWidget(colordlg);
    mainLayout->addWidget(filedlg);
    mainLayout->addWidget(fontBtn);

    QHBoxLayout* mainLayout2 = new QHBoxLayout;
    mainLayout2->addWidget(inputBtn);
    mainLayout2->addWidget(messageBtn);
    mainLayout2->addWidget(progressBtn);

    QHBoxLayout* mainLayout3 = new QHBoxLayout;
    mainLayout3->addWidget(errorBtn);
    mainLayout3->addWidget(wizardBtn);

    QVBoxLayout* allLayout = new QVBoxLayout(this);
    allLayout->addLayout(mainLayout);
    allLayout->addLayout(mainLayout2);
    allLayout->addLayout(mainLayout3);
    allLayout->addWidget(textEdit);
}

//颜色对话框：
void MyWidget::onColorBtnSlot()
{
    //颜色对话框：
            //方式1：静态成员函数：
    //QColor color = QColorDialog::getColor();
            //方式2：通过构造方法：
    QColorDialog dlg;
    dlg.exec();
    QColor color = dlg.currentColor();
                    //方式1就挺好用；


    qDebug()<<color;        //QColor(ARGB 1, 0, 0.666667, 0)    ------A是指透明度；RGB颜色组成

    //设置textEdit控件的文字颜色：
    textEdit->setTextColor(color);
}

//文件对话框：
void MyWidget::onFileBtnSlot()
{

    //选择一个文件：
    QString filestr = QFileDialog::getOpenFileName(this,
                                                   "请tm选择一个文件>",
                                                   ".",
                                                   "图片文件（*.jpg *.png *.gif);;文本文件（*.txt);;MP3文件(*.mp3);;所有文件(*.*)"
                                                                                        );
                                //"." —— 说明是当前文件目录；所以默认打开的是当前项目的文件目录；
    qDebug()<<filestr;     //找到文件路径并打印；有了文件路径 干什么都好说了；


    //路径转成文件名：
    QFileInfo fileInfo(filestr);
    qDebug()<<fileInfo.filePath();          //文件路径
    qDebug()<<fileInfo.fileName();       //文件名
    qDebug()<<fileInfo.size();                //文件大小




    /*
    //选择多个文件：
    QStringList list = QFileDialog::getOpenFileNames(this,
                                                     "请tm的选择多个文件>",
                                                       ".",
                                                       "所有文件(*.*)"
                                                                        );       //注意返回类型；

    //遍历字符串打印：
    for(int i = 0;i<list.count();i++)
    {
        qDebug()<<list.at(i);
    }
    */



    /*
    //选择文件夹：
    QString filejiastr = QFileDialog::getExistingDirectory(this,
                                                        "请tm选择文件夹>",
                                                         "."
                                                                    );
    qDebug()<<filejiastr;
    */


    /*
    //另存为：
    QString filepath = QFileDialog::getSaveFileName(this,
                                                      "另存为",
                                                        "",
                                                       "所有文件(*.*)"
                                                                        );
    qDebug()<<filepath;
            //因为没有对文件进行任何操作，只是想保存在某个位置，所以文件并不能保存
    */
}

 //字体对话框：
void MyWidget::onFontBtnSlot()
{
    bool ok;
    QFont font = QFontDialog::getFont(&ok,QFont("Timer  New Roman",12),this,"字体选择");
    qDebug()<<font;     //打印选择的字体格式
    textEdit->setFont(font);        //把选择的字体格式给到textEdit上的文本；
}

//文本对话框：
void MyWidget::onInputBtnSlot()
{
    /*
    //获取文本：
    bool ok;
    QString str = QInputDialog::getText(this,"输入框","请输入>",QLineEdit::Normal,"sb...",&ok);
    if(ok)          //点了成功了就ok，成功了就输出打印；
        qDebug()<<str;
    */


    /*
    //获取整数(含有微调下拉)：
    int ret = QInputDialog::getInt(this,"输入框","请输入>");
    qDebug()<<ret;
    */


    //获取下拉条目：
    QStringList list;
    list.append("cpp");
    list.append("c");
    list.append("data structure");
    list.append("mfc");
    list.append("mysql");
    list.append("qt");
    list.append("windows");
    QString item = QInputDialog::getItem(this,"输入框","请输入>",list,0);
    qDebug()<<item;
}

//消息对话框：
void MyWidget::onMessageBtnSlot()
{
    /*
    //关于框：
    QMessageBox::about(this,"关于","本软件有李飞独立开发");
    */



    //Qt关于框：
    QMessageBox::aboutQt(this,"关于Qt");



    /*
    //错误框：
    QMessageBox::warning(this,"不对","其实我才是你父亲");
    */


    /*
    //信息框
    QMessageBox::information(this,"信息","202004144229");
    */


    /*
    //危险框：
    QMessageBox::critical(this,"危险","河南电子科技大学");
    */
}

//进度对话框：
void MyWidget::onProgressBtnSlot()
{
    QProgressDialog dlg("假装是    复制进度条","取消",0,100000,this);
    dlg.setWindowModality(Qt::WindowModal);     //设置窗口风格为模态对话框
    dlg.resize(500,200);
    dlg.show();

    for(int i = 0;i<100000;i++)
    {
        QCoreApplication::processEvents();          //延时作用，不加这个函数进度条会进行的非常快，看不到变化；
        dlg.setValue(i);                    //根据循环的 i   来设置进度条的显示值
    }
    //循环到999999就结束循环了，最后进度条再显示下     进度100%
    dlg.setValue(100000);

}

//错误对话框：
void MyWidget::onErrorBtnSlot()
{
    QErrorMessage errordlg;
    errordlg.setWindowTitle("错误框");
    errordlg.showMessage("严重错误：错误对话框一般是在有bug或者严重的错误的时候才用到");
    errordlg.exec();

}

//向导对话框：
void MyWidget::onWizarBtnSlot()
{
    page1 = new QWizardPage;
    page2 = new QWizardPage;
    page3 = new QWizardPage;

    QWizard wizard;
    wizard.setWindowTitle("向导对话框");

    wizard.addPage(page1);
    QLabel* label = new QLabel("这是page      1       的向导页面，这是标签控件，你也可以添加其他控件，向这样操作",page1);
    QHBoxLayout* Layout1 = new QHBoxLayout(page1);
    Layout1->addWidget(label);

    wizard.addPage(page2);
    QLabel* label2 = new QLabel("这是page     2       的向导页面，这是标签控件，你也可以添加其他控件，向这样操作",page2);
    QHBoxLayout* Layout2 = new QHBoxLayout(page2);
    Layout2->addWidget(label2);

    wizard.addPage(page3);
    QLabel* label3 = new QLabel("这是page     3       的向导页面，这是标签控件，你也可以添加其他控件，向这样操作",page3);
    QHBoxLayout* Layout3 = new QHBoxLayout(page3);
    Layout3->addWidget(label3);

    wizard.exec();

}
